//#define  _CRT_SECURE_NO_WARNINGS
//#include <vector>
//#include <iostream>
//using namespace std;
//
//int main()
//{
//	int n, V;
//	cin >> n >> V;
//	vector<int> v(n), w(n);
//	for (int i = 0; i < n; i++)
//		cin >> v[i] >> w[i];
//
//
//	vector<int> dp(V + 1);
//	for (int i = 0; i < n; i++)
//		for (int j = V; j >= 0; j--)
//			if (j >= v[i]) dp[j] = max(dp[j], dp[j - v[i]] + w[i]);
//	cout << dp[V] << endl;
//
//	dp.assign(V + 1, 0);
//	for (int i = 0; i < n; i++)
//		for (int j = V; j >= v[i]; j--)
//			if (j == v[i] || dp[j - v[i]]) dp[j] = max(dp[j], dp[j - v[i]] + w[i]);
//	cout << dp[V] << endl;
//}